package com.zyz.common.utils;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zyz.common.core.domain.AjaxResult;
import com.zyz.common.core.domain.ReturnVO;
import com.zyz.common.core.page.PageDomain;
import com.zyz.common.core.page.TableDataInfo;
import com.zyz.common.core.page.TableSupport;
import com.zyz.common.core.page.Page;
import com.zyz.common.utils.html.HtmlKit;
import com.zyz.common.utils.sql.SqlUtil;


import java.util.List;

/**
 * web层通用数据处理
 *
 * @author Administrator
 */
public class WebKit {

    private WebKit() {
    }

    /**
     * 设置请求分页数据<br>
     * 调用startPage后，必须紧跟SQL查询操作
     */
    public static void startPage() {
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        if (pageNum == null) {
            pageNum = 1;
        }
        if (pageSize == null) {
            pageSize = 10;
        }
        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
            PageHelper.startPage(pageNum, pageSize, orderBy);
        }
    }

    /**
     * 构造分页响应数据（仅后台接口可用）
     *
     * @param <T>
     * @param list
     * @return TableDataInfo
     * @author zyz
     * @date 2021年2月2日
     */
    public static <T> TableDataInfo getDataTable(List<T> list) {
        TableDataInfo tableResult = new TableDataInfo();
        PageInfo<T> pageInfo = new PageInfo<T>(list);
        Long total = pageInfo.getTotal();
        tableResult.getTableResult(list, total.intValue());
        return tableResult;
    }

    /**
     * 构造分页响应数据
     *
     * @param <T>
     * @param list
     * @return Page<T>
     * @author zyz
     * @date 2021年2月26日
     */
    public static <T> Page<T> getPageData(List<T> list) {
        PageInfo<T> pageInfo = new PageInfo<T>(list);
        Page<T> page = new Page<T>();
        page.setList(pageInfo.getList());
        page.setPageNum(pageInfo.getPageNum());
        page.setPageSize(pageInfo.getPageSize());
        page.setTotalPage(pageInfo.getPages());
        page.setTotalRow(pageInfo.getTotal());
        page.setIsLastPage(pageInfo.isIsLastPage());
        page.setFirstPage(pageInfo.isIsFirstPage());
        return page;
    }

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    public static AjaxResult toAjax(int rows) {
        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
    }

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    public static ReturnVO<String> toReturnVo(int rows) {
        return rows > 0 ? ReturnVO.success() : ReturnVO.error();
    }

    /**
     * 页面跳转
     */
    public static String redirect(String url) {
        return StringUtils.format("redirect:{}", url);
    }

    /**
     * 获取完整的请求路径，包括：域名，端口，上下文访问路径
     *
     * @return String
     * @author zyz
     * @date 2021年3月2日
     */
    public static String getBasePath() {
        return ServletUtils.getBasePath();
    }

    /**
     * 获取文件HTTP全路径
     *
     * @param path
     * @return String
     * @author zyz
     * @date 2021年3月2日
     */
    public static String getHttpFullPath(String path) {
        return HtmlKit.getFileHttpAllPath(path, getBasePath());
    }

}